<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 强制改变this指向 
        // 函数.call  函数.apply 函数.bind

        // 借用继承  借用构造函数继承   

        // 核心 是把父类构造函数当成普通函数看待 
        // 强制改变this指向 

        // 优点 :
            //属性继承到了自己身上  
            // 有自己的原型了 

        // 缺点 只能继承属性 
        // 不能继承方法  
        function Person(name,age){
            this.name = name;
            this.age = age;

        }

        Person.prototype.sayHello = function(){
            console.log('hello world');
        }


        // 子类  

        function Student(gender,...arg){
            this.gender = gender;
            

            //实现继承 
            // 第一个参数 想让this指向谁 就写谁
            // 从第二个参数开始 依次给函数形参赋值  

            // 把父类构造指向 子类实例 
            Person.call(this,...arg); //这个this 子类 
            // 子类的this 指向本次创建的对象 



        }

        var  s1= new Student('男','张三',18);
        console.log(s1);
        console.log(s1.gender);
        console.log(s1.name);
        console.log(s1.age);
        // s1.sayHello()报错  
        

        var  s2= new Student('女','李四',20);
        console.log(s2);
        console.log(s2.gender);
        console.log(s2.name);
        console.log(s2.age);
        s2.sayHello()

    </script>
</body>
</html>